(define fact
  (fun ([x Int] [-> Int])
    (if (= x 0) 1 (* x (fact (- x 1))))))

(fact 5)                                -- 120
